┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                      キー入力シミュレートドライバー                        ┃
┃                              「KSD」                                    ┃
┃                               V1.7                                      ┃
┃                       Copyright (C) 1997,98 by AIG-Soft                    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
        説明書
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      これは何?                                                            ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

KSDは「Key Simulate Driver」の略で、キー入力をシミュレートするドライバーです
・・・ってそのままやんけ(^_^;)。

ファイルなどからの入力をキー入力に見せかけて入力させることが出来ます。
コマンドライン上でも使えますが、各種プログラムのキー入力を自動的に行わせる時
などに使えるでしょう。

本当はもっと重要な機能があるのですが、普通に使う分には表に出てきません。
くわしくはKSD.tecを参照してください。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      組み込み法                                                            ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

KSDはデバイスドライバーです。

Human68K V2.x以降で動作します。
(ただし確認したのはV3.02のみです。Human68Kのバージョン判定は
特にしていませんのでV1.xでも組み込めますが、動作しません。)

CONFIG.SYS内のDEVICE=/PROGRAM=、さらにコマンドラインからの起動でも組み込めます。
常駐サイズは本体約1500バイト+キーボードバッファー分です。

        KSD [オプション] キーバッファーサイズ

組み込みは、必ずキーボードバッファーのサイズ指定をともないます。
サイズ指定はバイト単位ですが、後ろに「K」を付けるとキロバイト単位になります
(1024=1K)。実際には内部処理の都合のため、指定サイズ−1バイトまでがキーバッファー
の容量となります。通常の利用において、バッファーエラーが起きないような十分なサイズ
(3K以上)を指定した方が無難です。

「組み込み例」
        DEVICE = A:¥SYS¥KSD.X 3072 -h          (Config.sys)
        PROGRAM = A:¥SYS¥KSD.X 3072 -h          (Config.sys)
        KSD.X 3K -h                             (コマンドライン)

(ちなみに、device=とprogram=両方に記述した時は、記述の順序にかかわらず
device=が優先されます。)

DEVICE=以外で組み込んだ時には解除出来ます。

すでに組み込まれている時にコマンドラインから再度実行すると、内部状態を表示または
設定します(ただし、/Hオプションを付けたときはエラーになります)。

常駐しますと、SHIFT+登録のキー操作だけを乗っ取ります。他のプログラムで
このキー操作を使っている場合には、それが操作出来なくなるので注意が必要です。
(現在のところ、このキー配置を'簡単'に変える方法は用意していません。)

なお、利用にはFLOAT?.X(互換品)が必要です。

┌───────────────────────────────────┐
│組み込み時の注意                                                      │
└───────────────────────────────────┘

KSDは"@KEY"というデバイス名を追加します。
このため、組み込み後はファイル名として"@KEY"は使えなくなります。
注意してください。
また、すでに他のドライバーが@KEYを作っている場合には組み込めません。

ただし、後述の/Kオプションを使うとデバイス名を@KSDに変更出来ます。
その時は、以後、すべてのマニュアル内記述の@KEYを@KSDに読み換えてください。

┌───────────────────────────────────┐
│オプション (-,/、英大文字小文字どちらでもOK)                        │
└───────────────────────────────────┘

次のオプションは常駐時のみ有効です。

/H      キーボードバッファーを高位メモリーから確保します。
        高位メモリーとは実装メモリーの後ろからのメモリーのことで、
        Xellent30や060Turboなどの持つHighメモリーではありません。
        デフォルトは、KSDの真後ろにキーボードバッファーを確保します。

/K      デバイス名を@KEYではなく@KSDにします。
        他のデバイスドライバーが@KEYを使っている時など、どうしても組み込めない時だけに
        設定します。
        このオプションを付けた時は、@KEYの代わりに@KSDを使うことでまったく同じ
        操作が出来ます。

/R      常駐を解除します。
        DEVICE=で組み込まれたときは解除できません。
        また、API(ksd.tecで説明)によって常駐解除ロックをされている時も
        常駐解除出来ません。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
次のオプションは常駐時/常駐後に有効です。

/P      KSDを休止状態にします。
/A      KSDを活動状態にします。
/B      外部プログラム起動なし活動状態にします。
/O      KSDを一時活動状態にします。
/S      KSDを完全停止状態にします。
        各状態の詳細に付いては後述します。
        外部プログラム起動に付いての詳細はksd.tecでしています。

/C      キーボードバッファーをクリアします。

/E      書き込みFull時には書き込めない分のデータは無視します
        書き込めないデータは切り捨てられますが、この場合、書き込むデータが
        2バイトコードデータであるかどうかの判定はしませんので、後の読み出しで
        文字化けする可能性があります。

/F      書き込みFull時には古いデータを消して書き込みを継続させます
        全データが書き込めるだけ、古いデータから読み出して空きを作り書き込みを
        継続します。この場合、バッファー内が2バイトコードデータであるかどうか
        の判定はしませんので、後の読み出しで文字化けする可能性があります。

KSDの起動時の状態は、/A /C /Fの状態です。

状態設定オプション系を同一時に指定した時の優先順位は、
        高 S>P>B>A>O 低
        高   F>E   低
です(優先順位が高いもの程強く効く)。

┌───────────────────────────────────┐
│エラー                                                                │
└───────────────────────────────────┘

オプションが規定外の時は簡易説明を表示して終了します。

*KSD組み込み時に発生する可能性の有るエラーは次の通りです。

「キーバッファーが確保できません」
        メモリーが足りないので指定サイズのキーバッファーが確保できません。
        もしくは、メモリーがおかしいのでバッファーが確保できません。

「キーバッファーサイズが異常です」
        指定バッファーサイズが0です。
        バッファーサイズは>0でなくてはいけません。

「すでに組み込まれています」
        すでに組み込まれているのに、再度組み込もうとしました。


「デバイス名:@KEY はすでに使用されています」
        デバイス@KEYは他のデバイスドライバーによって使われています。
        /Kを付けて組み込みしてみてください。

「デバイス名:@KSD はすでに使用されています」
        デバイス@KSDは他のデバイスドライバーによって使われています。
        /Kをはずして組み込みしてみてください。

/Kを付けても付けなくても「すでに使用されている」エラーが出た時には
KSDは組み込めません。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*KSD解除時に発生する可能性の有るエラーは次の通りです。

「ベクターが書き替えられています.KSDは解除できません」
        DOSの_KFLUSH,IOCSの_B_KEYSNS/_B_KEYINP/_B_SFTSNSのベクターが、KSD組み込み後に
        他のプログラムによって書き換えられています。この状態では解除できないので、
        先に後から入れたプログラムを解除してからKSDを解除してください。

        違うバージョンのKSDで常駐解除しようとした時にも発生することがあります。

「DEVICE=で組み込まれています.KSDは解除できません」
        DEVICE=で組み込まれた時は解除出来ません。

「キーバッファーが解放できません.KSDは解除できません」
        キーバッファーが解放できません。

「常駐ロックされています.KSDは解除できません」
        APIにより常駐解除出来なくされています。

「組み込まれていません」
        KSDは組み込まれていません。従って解除もできません。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      KSDの状態                                                          ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

KSDには大きく分けて以下の4つの状態があります。

活動状態
        KSDの全機能が有効な状態。
        (IOCSやDOSの)キー入力要求に対して、キーバッファー内容があればその内容を返し、
        無ければ本来のキー読み込みを行います。
        強制的に設定した場合、一時活動状態は解除されます。

外部プログラム起動なし活動状態
        キーバッファーは使えますが、外部プログラム起動が使えない状態です。
        強制的に設定した場合、一時活動状態は解除されます。

休止状態
        キーバッファー内容があっても本来のキー読み込みを行います。
        外部プログラム起動だけは使えます。
        強制的に設定した場合、一時活動状態は解除されます。

一時活動状態
        現在のキーバッファー内容がすべて読み出されるまで一時的に活動状態になります。
        読み出し終わったら休止状態に戻り、一時活動状態は自動的に解除されます。
        主に、元が休止状態の時に設定します。
        (キーバッファー内容がある状態でのみ設定可能なので、外部プログラム起動は
        出来ません。)

完全停止状態
        キーバッファー内容があっても本来のキー読み込みを行います。
        外部プログラム起動も使えなくなります。
        強制的に設定した場合、一時活動状態は解除されます。

以上をまとめると、次のようになります。

        オプション      バッファー      外部プログラム起動     補足
        --------------------------------------------------------------
           A              ○                ○                          
           B              ○                ×                          
           O              ○→×            ×             /A→/P相当
           P              ×                ○                          
           S              ×                ×                          

いずれの状態でも、オプションや"@KEY"やAPIへの操作(ksd.tecにて説明)は
受け付けます。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      普通の使い方                                                         ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

KSDを組み込むとデバイス"@KEY"(小文字も可能)が追加されます。
これに対する書き込みによってキーバッファーに書き込まれ、キー入力でその内容が
読み出されます。ですから、通常の利用方法としては、次のようなものが考えられます。

(1)キー入力を自動化する
        キー入力を伴うコマンドの前で、必要なキー入力を記述したファイル k を
        @KEYに入れます。
                type k > @key(Cp@Key k)
                キー入力を伴うコマンド
        
        typeをリダイレクトしているのは、copyではEOF($1a)まで入るためや、
        一部のコントロールコードの処理の問題です。
        テキストファイルでは、ファイルの改行($0a)とキーボードでの改行($0d)の
        違いもあり、そのままcopy file @keyすることはお勧め出来ません。
        テキストファイルにはCp@Key.x/Cp@KeyA.xを使います。
        ファイルがテキストファイルでない場合にはcopy k @keyも使えます。
        なお、どのような場合にも、データとして$00は書き込めません。

(2)必要な時にキーデータを取り込む
        (a)KSDを休止状態にする。
                KDS -p
        (b)必要な時にSHIFT+登録でキーバッファー内容を読み出す(一時活動状態になる)

        休止状態の時にSHIFT+登録を押すと、KSDはキーバッファー内容がある内だけ活動状態に
        なります。逆に言えば、キーバッファー内容を読み出してもらい終わったら休止状態に
        戻ります。これにより、必要な時にキーバッファー内容を読み出すことが出来るわけです。
        
        /B,/S状態では使えません。ご注意ください。

(3)プログラム間のデータやりとり
        プログラムA    ->      @KEY
                        write           -> プログラムB
                                                キー入力/read
        
        KSDをデバイス"@KEY"を通じてかAPIを通じて操作してデータを書き込み、
        別のプログラムからそれを読み出します。

デバイス"@KEY"はデバイスドライバーとしていろいろなコマンドをサポートしますが、
それについてはksd.tecにて説明します。

┌───────────────────────────────────┐
│使用上の注意                                                          │
└───────────────────────────────────┘

(1)コマンドライン(COMMAND.X)は、||でコマンドをつないで実行したとき、
||を通る時点でキーを1つ読みとってしまいます。このため、次のようなことをすると、
予測通りのファイル入力がされません。

[ファイルk]
        dir

[コマンド]
        copy k @KEY||COPY @KEY kk

こうしたとき、本来ファイルkkには"dir"と入っているべきですが、
実際には||で'd'が読みとられてしまい、"ir"となります。
さらに、コマンド実行後のコマンドライン先頭に'd'が出ます。

これを防ぐためには、一度休止状態にして受け渡しする必要があります。

        ksd -p||copy k @KEY||COPY @KEY kk||ksd -a

||を使わなくても、コマンドライン上での利用は、勝手にキーが読み取られている
ことがあるようで、うまくいかないことがあります。


(2)KSDを組み込むと、キー入力の処理に負荷がかかるので、キー入力が遅く
なります。キーバッファーが空である/休止状態である時にはそれほどでもないですが
(休止させた方が負荷がより少ない)、活動状態では処理負荷がありますのでご注意
ください。特に、10MHzの機種でリアルタイムでキー入力を使っている場合には
問題になるかも知れません(未確認)。完全休止状態にするとIOCSとほぼ同等になります。

     処理負荷   状態
        軽い    組み込んでない          (元のまま)
         ↑     完全停止状態                    /S
         |     外部プログラム起動なし活動状態  /B
         |     休止状態                        /P
         |以下活動状態                         /A
         |     キーバッファーあり
         ↓     起動キーを追加していない
        重い    起動キーを追加している

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      テストしたソフト                                                      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

以下のソフトで、一応の動作テストをしています。
ただし、ちょっとやってみただけであり、その上での動作を(すべての場面に於いて)
保証するものではありません。

エディター系のものは、オートインデントがある場合、offにしていた方がいいでしょう。

-------------------------------------------------------------------------------
結果    ソフト名        バージョン      作者            補足
-------------------------------------------------------------------------------
エディター系
○      SuperED.X       v1.18       T.Nishikawa
○      ED.R            v0.99XD     S.Ueda
○      ED.X            v?.??       SHARP/Hudson
○      MY.X            v1.16       JOJO
○      EDT.X           V1.55       いろもの物理学者
△      FES.X           V1.26a      ずうやん            ASC入力時のみ可能
○      NG68.X          V1.3.1      M.Suzuki
○      NG12.X          V1.3.1      M.Suzuki

ビューワー系
○      LOQUAT.R        v1.02       TAMA.               文字列検索枠内
○      MSV.X           V0.84       SaTa.               文字列検索枠内

システム系
○      COMMAND.X       V3.00       SHARP/Hudson        仮名漢字変換ラインもok
○      X-BASIC         V2.02       SHARP/Hudson
○      SCD.X           v3.00       SHARP/Hudson

ファイラー
×      WS            V0.90       Fuchi

その他
○      Condrv.sys      v1.09c    卑弥呼☆            同時常駐可能(KSDが後)
         +30用パッチ                 Mews
○      Condrv.sys      v1.09c+09a  卑弥呼☆/立花えり子 同時常駐可能(KSDが後)

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      お約束                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

(1)転載は、無料ネットへの場合、特に制限はありません。自由です。
   有料ネットへの転載・ホームページへの掲載は「必ず事前に」ご連絡下さい。
   各種メディアによる販売も個人/企業を問わず「必ず事前に」ご連絡下さい。
   Q2ネットへの転載は「禁止」です。

(2)このプログラムを使って発生したのいかなる問題にも、当方は関知しません。

動かない・動作がおかしいと思う時は、LeDAまでお知らせ下さい。
また、こうした方が良い等のいろいろな御意見・御感想もお待ちしております。
単に「使っている!」やバグ報告、「説明書の内容がよくわからん!」でもけっこうです。(^_^;)

これが、皆さんに、長く使っていただけるツールであることと、
このプログラムを使う、X68現役ユーザーが多いことを祈りながら・・・。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃      連絡先                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

        PowerStation    PS0071
        満開ネット      MKSX0424
        E-Mail          LeDA@osaka.email.ne.jp

上記ならよく連絡が付きますが、まれにしばらく通信出来なくなることがありますので、
気長にお待ち下さい。

                                LeDA